//雪糕的最大数量
/*夏日炎炎，小男孩 Tony 想买一些雪糕消消暑。

商店中新到 n 支雪糕，用长度为 n 的数组 costs 表示雪糕的定价，其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费，他想要买尽可能多的雪糕。

注意：Tony 可以按任意顺序购买雪糕。

给你价格数组 costs 和现金量 coins ，请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。

你必须使用计数排序解决此问题。

*/
class Solution {
public:
    int maxIceCream(vector<int>& costs, int coins) {
        int count = 0;

        int hash[100001] = {0};
        for (auto& num : costs) {
            hash[num]++;
        }
        for (int i = 1; i < 100001 && count < costs.size(); i++) {
            while (hash[i]) {
                if (coins >= i) {
                    count++;
                    coins -= i;
                    hash[i]--;
                } else
                    return count;
            }
        }
        return count;
    }
};



//对奇偶下标分别排序
/*给你一个下标从 0 开始的整数数组 nums 。根据下述规则重排 nums 中的值：

按 非递增 顺序排列 nums 奇数下标 上的所有值。
举个例子，如果排序前 nums = [4,1,2,3] ，对奇数下标的值排序后变为 [4,3,2,1] 。奇数下标 1 和 3 的值按照非递增顺序重排。
按 非递减 顺序排列 nums 偶数下标 上的所有值。
举个例子，如果排序前 nums = [4,1,2,3] ，对偶数下标的值排序后变为 [2,1,4,3] 。偶数下标 0 和 2 的值按照非递减顺序重排。
返回重排 nums 的值之后形成的数组。

 */
 class Solution {
public:
    vector<int> sortEvenOdd(vector<int>& nums) {
        vector<int> arr1;
        vector<int> arr2;
        for (int i = 0; i < nums.size(); i++) {
            if (i % 2) {
                arr1.push_back(nums[i]);
            } else {
                arr2.push_back(nums[i]);
            }
        }
        sort(arr1.begin(), arr1.end(), greater());
        sort(arr2.begin(), arr2.end());
        int one=0;
        int two=0;
        for (int i = 0; i < nums.size(); i++) {
            if (i % 2) {
                nums[i]=arr1[one++];
            } else {
                nums[i]=arr2[two++];
            }
        }
        return nums;
    }
};